package cn.cytong.nk0713.utils.nutz;

import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;

/**
 * 为org.nutz.dao.sql.Sql绑定参数封装的快捷方法
 */
public class SqlUtility {
    /**
     * 生成org.nutz.dao.sql.Sql实例对象，并绑定参数
     *
     * @param sqlSource sql语句，使用?作为参数占位符
     * @param params    参数列表
     * @return
     */
    public static Sql buildWithParams(String sqlSource, Object... params) {
        Sql sql = Sqls.create(replaceParamNames(sqlSource));
        for (int i = 0; i < params.length; i++) {
            sql.params().set("p" + i, params[i]);
        }

        return sql;
    }

    /**
     * 将sql语句中的问号?按顺序替换为@pxx形式，xx表示参数编号，从0开始
     *
     * @param sql sql语句
     * @return
     */
    public static String replaceParamNames(String sql) {
        int markIndex = 0;
        int paramIndex = 0;

        StringBuilder builder = new StringBuilder(sql);
        while ((markIndex = builder.indexOf("?", markIndex)) != -1) {
            builder.replace(markIndex, markIndex + 1, "@p" + paramIndex);
            paramIndex++;
        }

        return builder.toString();
    }
}
